package service;

import java.util.HashMap;
import java.util.List;

import model.Module;
import model.ModuleCheck;
import model.User;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

import dao.ModuleDao;

@Service
public class ModuleService {
	@Autowired
	private ModuleDao moduleDao;

	/**
	 * 风琴结构的 一级菜单
	 * 
	 * @return
	 */
	public List<HashMap<String, Object>> queryMenu() {
		return moduleDao.queryMenu();
	};

	/**
	 * 一级菜单 的 树形结构
	 * 
	 * @return
	 */
	public List<HashMap<String, Object>> queryMenuTree(Integer id) {
		return moduleDao.queryMenuTree(id);
	};

	/**
	 * 风琴结构的 一级菜单(权限控制)
	 * 
	 * @return
	 */
	public List<HashMap<String, Object>> queryUserMenu(User user) {
		Integer userid = user.getId();
		return moduleDao.queryUserMenu(userid);
	};

	/**
	 * 一级菜单 的 树形结构(权限控制)
	 * 
	 * @return
	 */
	public List<HashMap<String, Object>> queryUserMenuTree(
			HashMap<String, Object> map) {
		return moduleDao.queryUserMenuTree(map);
	};

	/**
	 * 模块管理列表 的 树形结构
	 * 
	 * @return
	 */
	public List<HashMap<String, Object>> queryTree(Integer id) {
		return moduleDao.queryTree(id);
	};

	/**
	 * 根据父节点，获得完整的树形结构
	 * 
	 * @param pid
	 * @return
	 */
	public List<Module> getTreeBypid(Integer pid) {
		List<Module> list = moduleDao.queryTreeList(pid);

		if (list.size() > 0) {
			for (int i = 0; i < list.size(); i++) {
				list.get(i).setChildren(getTreeBypid(list.get(i).getId()));
			}
		}
		return list;
	}

	/**
	 * 根据父节点，获得完整的树形结构
	 * 
	 * @param pid
	 * @return
	 */
	public List<ModuleCheck> getTreeCheckBypid(Integer pid) {
		List<ModuleCheck> list = moduleDao.queryTreeCheckList(pid);

		if (list.size() > 0) {
			for (int i = 0; i < list.size(); i++) {
				list.get(i).setChildren(getTreeCheckBypid(list.get(i).getId()));
			}
		}
		return list;
	}

	/**
	 * 模块新增、修改
	 * 
	 * @param user
	 * @return
	 */
	public void saveOrUpdate(Module module) {
		if (module.getPid() == null || module.getPid() == 0) {
			module.setPid(0);
			module.setLevel(1);
		} else {
			Module pmodule = moduleDao.getById(module.getPid());
			Integer plevel = pmodule.getLevel();
			module.setLevel(plevel + 1);
			if ("true".equals(pmodule.getLeaf())) {
				pmodule.setLeaf("false");
				moduleDao.update(pmodule);
			}
		}
		if (module.getId() == null) {
			moduleDao.save(module);
		} else {
			moduleDao.update(module);
		}
	};
}
